package com.itheima.crawler;

import org.apache.commons.io.IOUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URLEncoder;

/**
 * 使用jsoup 爬数据
 */
public class JsoupZGirlCrawler {
    public static void main(String[] args) throws Exception {
        //网站的地址
        Document document = Jsoup.connect("https://pic.netbian.com/4kmeinv/index_2.html").get();

        //数据获得部分
        Elements allLiElements = document.select(".slist li");//获得第一页所有的li





        //开始遍历数据 每一页都有一堆的li
        for(int i = 2 ; i < 174 ; i++){
            //加载数据
            //第一页不需要拿li  因为在加载第一页代码的时候 就已经获得  从第二页开始 每次都获得
            if(i>1){
                //m每一次获得重新覆盖document
                document = Jsoup.connect("https://pic.netbian.com/4kmeinv/index_"+i+".html").get();
                //第二次加载 document新的  而li也是新的
                allLiElements = document.select(".slist li");//获得第二页以后所有的li
            }
            System.out.println("-------------第"+i+"页开始-------------------");
            //遍历数据
            for (Element curLiElement : allLiElements) { //current 当前的li元素
                //获得图片对象
                Element imgElement = curLiElement.select("a>img").first();
                //System.out.println(imgElement);
                if(imgElement == null){
                    continue;
                }


                //attr => attribute 属性
                //获得图片的路径  <img src="/uploads/allimg/200902/235211-159906193176af.jpg" alt="坐在椅子上国外美女 凝望眼睛 4k壁纸">
                String imgSrc = imgElement.attr("src"); //     /uploads/allimg/200902/235211-159906193176af.jpg
                imgSrc= "https://pic.netbian.com/"+imgSrc;  // 网址前缀+图片路径  D:/xxx.jpg
                //System.out.println(imgSrc);

                //获得图片的名称   235211-159906193176af.jpg   xxx.jpg
                String imgName = imgSrc.substring( imgSrc.lastIndexOf("/")+1 );
                //System.out.println(imgName);

                //下载
                //访问到图片 ==>> 如果浏览器 可以直接访问
                //发送请求接收响应需要有客户端==>>浏览器
                //使用java客户端 HttpClients==>> 必须遵循http协议
                CloseableHttpClient httpClient = HttpClients.createDefault();

                //请求分为 get和post 参数是访问路径
                HttpGet httpGet = new HttpGet(imgSrc); //打开了浏览器 输入了地址
                //发送请求  获得响应
                CloseableHttpResponse response = httpClient.execute(httpGet);//回车

                //响应协议 获得响应的对象    是服务器(网站给我们的返回对象)
                HttpEntity entity = response.getEntity();

                //获得对象中的内容  Content==>>内容 响应体就是图片输入流
                InputStream is = entity.getContent();

                //保存到本地==>>需要有输出流  参数是路径 + 文件的名称
                File file = new File("D:\\谷歌浏览器下载\\趴下来的图片"+imgName);
                FileOutputStream os = new FileOutputStream(file);



                //流转换 输入流转换成输入流
                IOUtils.copy(is, os);
                //释放资源
                is.close();
                os.close();

                System.out.println("保存图片成功:"+imgName);

            }
            System.out.println("-------------第"+i+"页结束-------------------");
        }

    }
}
